package com.hsnn.medstgmini.sys.service;

import java.util.Date;
import java.util.List;

import com.hsnn.medstgmini.sys.model.SysPrivilege;
import com.hsnn.medstgmini.sys.model.SysRole;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.util.Pagination;

/**
 * @category 用户管理
 * @author 蔡春龙
 * @date 2015年6月15日
 */
public interface SysUserManager {

	/**
	 * @category 根据用户名查询用户
	 * @date 2015年6月15日
	 * @param username
	 * @return
	 */
	SysUser getUserByUsername(String username);

	/**
	 * @category 保存登陆ip，登陆时间，登陆次数等信息
	 * @date 2015年6月15日
	 * @param user
	 */
	void saveLoginInfo(SysUser user);

	/**
	 * @category 中心分页查询用户列表
	 * @date 2015年6月16日
	 * @param user
	 * @return
	 */
	Pagination getZxUserList(Pagination page, SysUser user);

	/**
	 * @category 启用|停用
	 * @param user
	 */
	void changeStatus(SysUser user);
	
	/**
	 * @category 编辑主用户信息
	 * @param user
	 */
	void saveZUser(SysUser user,String updUser);
	

	/**
	 * @category 批量(启用|停用)
	 * @param list
	 */
	void batchChangeStatus(List<SysUser> list);

	/**
	 * @category 根据id查询用户
	 * @date 2015年6月17日
	 * @param id
	 * @return
	 */
	SysUser getUserById(String id);
	SysUser getUserByOrgId(String OrgId);

	/**
	 * @category 获取sequence
	 */
	Long getSequence();

	/**
	 * @category 中心保存主用户信息
	 * @date 2015年6月14日
	 * @param user
	 */
	void zxSaveUser(int opType, SysUser user, List<SysPrivilege> list);

	/**
	 * @category 中心、医疗机构、企业查询子用户列表
	 * @date 2015年6月18日
	 * @param page
	 * @param loginUser当前登人
	 * @param user查询条件
	 * @return
	 */
	Pagination getSubUserList(Pagination page, SysUser loginUser, SysUser user);
	
	/**
	 * @category 中心修改密码
	 * @date 2015年6月19日
	 * @param id
	 * @param password
	 */
	void changePassword(String id, String password);
	
	/**
	 * @category 根据机构id及主账户查询父级id
	 * @author 韩守松
	 * @date   2015年10月16日
	 * @param  @return
	 */
	String getPidId(String orgId,Integer main);

	
	/**
	 * @category 新增用户
	 * @date 2015年10月17日14:16:14
	 * @param user
	 */
	Boolean addSysUser(SysUser user);
	
	/**
	 * @category 获取未生成主账号的医疗机构
	 * @author 应晓川
	 * @date 2015年10月17日15:15:41
	 * @param page
	 * @return
	 */
	Pagination getHospInfoList(Pagination page);
	
	/**
	 * @category 获取未生成主账号的企业
	 * @author 应晓川
	 * @date 2015年10月17日15:15:41
	 * @param page
	 * @return
	 */
	Pagination getCompInfoList(Pagination page);
	
	/**
	 * @category 获取未生成主账号的专家
	 * @author 应晓川
	 * @date 2015年10月17日15:15:41
	 * @param page
	 * @return
	 */
	Pagination getStdExpertList(Pagination page);
	
	/**
	 * @category 获取未生成主账号的卫生局
	 * @author 应晓川
	 * @date 2015年10月17日15:15:41
	 * @param page
	 * @return
	 */
	Pagination getStdHealthbureauList(Pagination page);
	
	
	/**
	 * @category 根据id获取角色表
	 * @author 应晓川
	 * @date 2015年10月19日10:22:50
	 * @param id
	 * @return List<SysRole>
	 */
	List<SysRole> getSysRoleListByType(String id);
	
	/**
	 * @category 1.新增用户角色表（sys_user_role）
				 2.查子角色的权限（sys_role_privilege）
				 3.新增用户权限表（sys_user_privilege）
	 * @author 应晓川
	 * @date 2015年10月19日11:14:07
	 * @param userId
	 * @param roleId
	 */
	Boolean addSysUserRoleAndPrivilege(String userId,String roleId,Date updTime,String updUser);
	
	/**
	 * @category 获取专家类别
	 * @author 应晓川
	 * @date 2015年10月22日15:00:55
	 * @return List<Object>
	 */
	List<Object> getExpSkillsList();
	
	
	/**
	 * @category 根据主用户id查询旗下的子用户id
	 * @date 2015年10月30日11:16:23
	 * @param id
	 * @return List<String>
	 */
	List<String> getSubUserByzxId(String id);
	
	/**
	 * @category  查询所有用户信息
	 * @author 韩守松
	 * @date   2015年11月11日
	 * @param  @param page
	 * @param  @param user
	 * @param  @return
	 */
	Pagination getAllZxUserList(Pagination page, SysUser user);
	
	/**
	 * @category 根据角色id获取角色信息
	 * @author 韩守松
	 * @date   2015年12月19日
	 * @param  @param roleId
	 * @param  @return
	 */
	SysRole getSysRoleByRoleId(String roleId);

	void addHospAddress(String userId, String updUser);
	
	
	public void addZUser(SysUser user);
	public void saveUserRole(List<String> list, String userId);
	public void deleteUser(List<String> list);
}